home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / TRANSFER.PAK / TRANSFER.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  11KB  |  449 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1991, 1995 by Borland International, All Rights Reserved
  4. //----------------------------------------------------------------------------
  5. #include <owl/pch.h>
  6. #include <owl/applicat.h>
  7. #include <owl/framewin.h>
  8. #include <owl/dialog.h>
  9. #include <owl/radiobut.h>
  10. #include <owl/edit.h>
  11. #include <owl/listbox.h>
  12. #include <owl/combobox.h>
  13. #include <owl/scrollba.h>
  14. #include <string.h>
  15. #include <cstring.h>
  16. #include "transfer.h"
  17.  
  18. const MAXNAMELEN    = 26;
  19. const MAXADDRLEN    = 47;
  20. const MAXCITYSTLEN  = 27;
  21. const MAXCOUNTRYLEN = 27;
  22. const MAXLBDATALEN  = 30;
  23. const MAXCBDATALEN  = 30;
  24.  
  25. const WM_DIALOG_CLOSED = WM_USER + 100;
  26.  
  27. #include <pshpack1.h>
  28.  
  29. struct TTransferStruct {
  30.   TTransferStruct();
  31.  
  32.   uint16          MrTitle;
  33.   uint16          MsTitle;
  34.   uint16          DrTitle;
  35.   char            NameEdit[MAXNAMELEN];
  36.   char            Addr1Edit[MAXADDRLEN];
  37.   char            Addr2Edit[MAXADDRLEN];
  38.   char            CityStEdit[MAXCITYSTLEN];
  39.   char            CountryEdit[MAXCOUNTRYLEN];
  40.   uint16          CheckBox1;
  41.   uint16          CheckBox2;
  42.   uint16          CheckBox3;
  43.   TListBoxData    ListBoxData;
  44.   char            LBDataEdit[MAXLBDATALEN];
  45.   TComboBoxData   ComboBoxData;
  46.   char            CBDataEdit[MAXCBDATALEN];
  47.   TScrollBarData  ScrollBarData;
  48. };
  49.  
  50. #include <poppack.h>
  51.  
  52. TTransferStruct::TTransferStruct()
  53. {
  54.   MrTitle = 1;
  55.   MsTitle = DrTitle = 0;
  56.   NameEdit[0]    = 0;
  57.   Addr1Edit[0]   = 0;
  58.   Addr2Edit[0]   = 0;
  59.   CityStEdit[0]  = 0;
  60.   CountryEdit[0] = 0;
  61.  
  62.   CheckBox1 = CheckBox3 = 1;
  63.   CheckBox2 = 0;
  64.  
  65.   //
  66.   // Pre-fill the listbox. It may be sorted, and/or multiselect
  67.   //
  68.   ListBoxData.AddString("Zebra");
  69.   ListBoxData.AddString("Aardvark");
  70.   ListBoxData.AddString("Ocelot");
  71.   ListBoxData.AddString("Beaver");
  72.   ListBoxData.AddString("Emu");
  73.   ListBoxData.Select(2);    // Ocelot
  74.   ListBoxData.Select(3);    // Beaver
  75.   LBDataEdit[0] = 0;
  76.  
  77.   //
  78.   // Pre-fill the combobox
  79.   //
  80.   ComboBoxData.AddString("Red");
  81.   ComboBoxData.AddString("Pink");
  82.   ComboBoxData.AddString("Blue");
  83.   ComboBoxData.AddString("Green");
  84.   ComboBoxData.AddString("Yellow");
  85.   ComboBoxData.Select(2);    // Blue
  86.   CBDataEdit[0] = 0;
  87.  
  88.   ScrollBarData.LowValue = 0;
  89.   ScrollBarData.HighValue = 100;
  90.   ScrollBarData.Position = 50;
  91. }
  92.  
  93.  
  94. //
  95. // class TTransferDialog
  96. // ~~~~~ ~~~~~~~~~~~~~~~
  97. class TTransferDialog : public TDialog {
  98.   public:
  99.     TTransferDialog(TWindow* parent, int resId, TTransferStruct& ts);
  100.     void CmAddListBox();
  101.     void CmAddComboBox();
  102.     void EvDestroy();
  103.  
  104.     void CloseWindow(int ret);
  105.  
  106.   private:
  107.     TListBox*   ListBox;         // cache for transfer access.
  108.     TComboBox*  ComboBox;
  109.     TEdit*      ListBoxData;
  110.     TEdit*      ComboBoxData;
  111.     TScrollBar* ScrollBar;
  112.  
  113.   DECLARE_RESPONSE_TABLE(TTransferDialog);
  114.  
  115. };
  116.  
  117. DEFINE_RESPONSE_TABLE1(TTransferDialog, TDialog)
  118.   EV_COMMAND(CM_ADDLISTBOX, CmAddListBox),
  119.   EV_COMMAND(CM_ADDCOMBOBOX, CmAddComboBox),
  120.   EV_WM_DESTROY,
  121. END_RESPONSE_TABLE;
  122.  
  123. TTransferDialog::TTransferDialog(TWindow* parent, int resId, TTransferStruct& ts)
  124. :
  125.   TDialog(parent, resId)
  126. {
  127.   new TRadioButton(this, ID_MRBUTTON, 0);
  128.   new TRadioButton(this, ID_MSBUTTON, 0);
  129.   new TRadioButton(this, ID_DRBUTTON, 0);
  130.   new TEdit(this, ID_NAMEEDIT, sizeof(ts.NameEdit));
  131.   new TEdit(this, ID_ADDR1EDIT, sizeof(ts.Addr1Edit));
  132.   new TEdit(this, ID_ADDR2EDIT, sizeof(ts.Addr2Edit));
  133.   new TEdit(this, ID_CITYSTEDIT, sizeof(ts.CityStEdit));
  134.   new TEdit(this, ID_COUNTRYEDIT, sizeof(ts.CountryEdit));
  135.   new TCheckBox(this, ID_CHECKBOX1);
  136.   new TCheckBox(this, ID_CHECKBOX2);
  137.   new TCheckBox(this, ID_CHECKBOX3);
  138.   ListBox = new TListBox(this, ID_LISTBOX);
  139.   ListBoxData = new TEdit(this, ID_LISTBOXDATA, sizeof(ts.LBDataEdit));
  140.   ComboBox = new TComboBox(this, ID_COMBOBOX, MAXCBDATALEN);
  141.   ComboBoxData = new TEdit(this, ID_COMBOBOXDATA, sizeof(ts.CBDataEdit));
  142.   ScrollBar = new TScrollBar(this, ID_SCROLLBAR);
  143.   SetTransferBuffer(&ts);
  144. }
  145.  
  146. //
  147. // Lets transfer on close even though we are modeless
  148. //
  149. void
  150. TTransferDialog::CloseWindow(int ret)
  151. {
  152.   TransferData(tdGetData);
  153.   TDialog::CloseWindow(ret);
  154. }
  155.  
  156.  
  157. //
  158. // Add a string to the list box.
  159. //
  160. void
  161. TTransferDialog::CmAddListBox()
  162. {
  163.   char buf[MAXLBDATALEN] = "";
  164.  
  165.   ListBoxData->GetLine(buf, MAXLBDATALEN - 1, 0);
  166.   if (buf[0] != '\0')
  167.     ListBox->AddString(buf);
  168.   ListBoxData->DeleteLine(0);
  169. }
  170.  
  171. //
  172. // Add a string to the combo box.
  173. //
  174. void
  175. TTransferDialog::CmAddComboBox()
  176. {
  177.   char buf[MAXCBDATALEN] = "";
  178.  
  179.   ComboBoxData->GetLine(buf, MAXCBDATALEN - 1, 0);
  180.   if (buf[0] != '\0')
  181.     ComboBox->AddString(buf);
  182.   ComboBoxData->DeleteLine(0);
  183. }
  184.  
  185. void
  186. TTransferDialog::EvDestroy()
  187. {
  188.   // tell application that dialog is closing.
  189.   //
  190.   Parent->PostMessage(WM_DIALOG_CLOSED);
  191.   TDialog::EvDestroy();
  192. }
  193.  
  194.  
  195. //
  196. // class TTransferInfoDialog
  197. // ~~~~~ ~~~~~~~~~~~~~~~~~~~
  198. class TTransferInfoDialog : public TDialog {
  199.   public:
  200.     TTransferInfoDialog(TWindow* parent, int resId, string& info);
  201.     void SetupWindow();
  202.  
  203.   private:
  204.     TEdit*  DisplayInfo;
  205.     string& Info;
  206. };
  207.  
  208. TTransferInfoDialog::TTransferInfoDialog(TWindow* parent, int resId, string& info)
  209. :
  210.   TDialog(parent, resId),
  211.   Info(info)
  212. {
  213.   DisplayInfo = new TEdit(this, ID_INFO, 2000);
  214. }
  215.  
  216. void
  217. TTransferInfoDialog::SetupWindow()
  218. {
  219.   TDialog::SetupWindow();
  220.   DisplayInfo->Insert(Info.c_str());
  221. }
  222.  
  223.  
  224. //
  225. // class TTransferWindow
  226. // ~~~~~ ~~~~~~~~~~~~~~~
  227. class TTransferWindow : public TWindow {
  228.   public:
  229.     TTransferWindow(TWindow* parent = 0);
  230.    ~TTransferWindow()
  231.     {
  232.       delete[] Label;
  233.     }
  234.  
  235.     void CmDialog();
  236.     void CmTransfer();
  237.     void CmDialogEnable(TCommandEnabler& commandHandler);
  238.     TResult EvDialogClosed(TParam1 wParam, TParam2 lParam);
  239.  
  240.   private:
  241.     TTransferStruct   TransferStruct;
  242.     TTransferDialog*  TransferDialog;
  243.     char*             Label;     // string to print on transfer.
  244.  
  245.   DECLARE_RESPONSE_TABLE(TTransferWindow);
  246. };
  247.  
  248. DEFINE_RESPONSE_TABLE1(TTransferWindow, TWindow)
  249.   EV_COMMAND(CM_DIALOG, CmDialog),
  250.   EV_COMMAND(CM_TRANSFER, CmTransfer),
  251.   EV_COMMAND_ENABLE(CM_DIALOG, CmDialogEnable),
  252.   EV_MESSAGE(WM_DIALOG_CLOSED, EvDialogClosed),
  253. END_RESPONSE_TABLE;
  254.  
  255.  
  256. TTransferWindow::TTransferWindow(TWindow* parent)
  257. :
  258.   TWindow(parent)
  259. {
  260.   Label = new char[1024];
  261.   Label[0] = 0;
  262.   TransferDialog = 0;
  263. }
  264.  
  265. //
  266. // Create modeless dialog.
  267. //
  268. void
  269. TTransferWindow::CmDialog()
  270. {
  271.   TransferDialog = new TTransferDialog(this, IDD_DIALOG, TransferStruct);
  272.   TransferDialog->Create();
  273.   TransferDialog->ShowWindow(SW_SHOW);
  274. }
  275.  
  276. //
  277. // Transfer data and display.
  278. //
  279. void
  280. TTransferWindow::CmTransfer()
  281. {
  282.   if (TransferDialog)
  283.     TransferDialog->Transfer(&TransferStruct, tdGetData);
  284.  
  285.   TStringArray& lbStrArray = TransferStruct.ListBoxData.GetStrings();
  286.   TStringArray& cbStrArray = TransferStruct.ComboBoxData.GetStrings();
  287.   unsigned      lbNItems = lbStrArray.GetItemsInContainer();
  288.   unsigned      cbNItems = cbStrArray.GetItemsInContainer();
  289.   unsigned      i;
  290.   char          buf[10];
  291.   string        displayInfo;
  292.  
  293.   // mailing info.
  294.   //
  295.   displayInfo += "Mailing Label Entered:";
  296.   displayInfo += "\r\n";
  297.   if (TransferStruct.MrTitle)
  298.     displayInfo += "Mr. ";
  299.   else if (TransferStruct.MsTitle)
  300.     displayInfo +=  "Ms. ";
  301.   else if (TransferStruct.DrTitle)
  302.     displayInfo += "Dr. ";
  303.   else
  304.     displayInfo += "??. ";
  305.   displayInfo += TransferStruct.NameEdit;
  306.   displayInfo += "\r\n";
  307.   displayInfo += TransferStruct.Addr1Edit;
  308.   displayInfo += "\r\n";
  309.   if (strcmp(TransferStruct.Addr2Edit, "") != 0) {
  310.     displayInfo += TransferStruct.Addr2Edit;
  311.     displayInfo += "\r\n";
  312.   }
  313.   displayInfo += TransferStruct.CityStEdit;
  314.   displayInfo += "\r\n";
  315.   displayInfo += TransferStruct.CountryEdit;
  316.   displayInfo += "\r\n";
  317.   displayInfo += "\r\n";
  318.  
  319.   // check boxes.
  320.   //
  321.   if (TransferStruct.CheckBox1)
  322.     displayInfo += "CheckBox #1 checked.\r\n";
  323.   else
  324.     displayInfo += "CheckBox #1 not checked.\r\n";
  325.  
  326.   if (TransferStruct.CheckBox2)
  327.     displayInfo += "CheckBox #2 checked.\r\n";
  328.   else
  329.     displayInfo += "CheckBox #2 not checked.\r\n";
  330.  
  331.   if (TransferStruct.CheckBox3)
  332.     displayInfo += "CheckBox #3 checked.\r\n\r\n";
  333.   else
  334.     displayInfo += "CheckBox #3 not checked.\r\n\r\n";
  335.  
  336.   // list box strings.
  337.   //
  338.   if (lbNItems != 0) {
  339.     TStringArrayIterator iter(lbStrArray);
  340.     displayInfo += "First 5 ListBox strings:\r\n";
  341.     for (i = 0; i < lbNItems && i < 5; i++, iter++) {
  342.       displayInfo += "    ";
  343.       displayInfo += iter.Current();
  344.       displayInfo += "\r\n";
  345.     }
  346.     displayInfo += "\r\n";
  347.  
  348.     displayInfo += "Listbox selection\r\n    ";
  349.     string sel;
  350.     TransferStruct.ListBoxData.GetSelString(sel);
  351.     displayInfo += sel;
  352.     displayInfo += "\r\n";
  353.   }
  354.  
  355.   // strings from edit control for list box data.
  356.   //
  357.   if (TransferStruct.LBDataEdit[0] != '\0') {
  358.     displayInfo += "String from Edit control for ListBox data:\r\n    ";
  359.     displayInfo += TransferStruct.LBDataEdit;
  360.     displayInfo += "\r\n";
  361.   }
  362.  
  363.   // combo box strings.
  364.   //
  365.   if (cbNItems != 0) {
  366.     displayInfo += "First 5 ComboBox strings:\r\n";
  367.     for (i = 0; i < cbNItems && i < 5; i++) {
  368.       displayInfo += "    ";
  369.       displayInfo += cbStrArray[i];
  370.       displayInfo += "\r\n";
  371.     }
  372.     displayInfo += "\r\n";
  373.  
  374.     displayInfo += "Combobox selection\r\n    ";
  375.     displayInfo += TransferStruct.ComboBoxData.GetSelection();
  376.     displayInfo += "\r\n";
  377.   }
  378.  
  379.   // strings from edit control for combo box data.
  380.   //
  381.   if (TransferStruct.CBDataEdit[0] != '\0') {
  382.     displayInfo += "String from Edit control for ComboBox data:\r\n    ";
  383.     displayInfo += TransferStruct.CBDataEdit;
  384.   }
  385.  
  386.   // scroll bar info.
  387.   //
  388.   displayInfo += "\r\nScrollBar Info:\r\n    Low value: ";
  389.   itoa(TransferStruct.ScrollBarData.LowValue, buf, 10);
  390.   displayInfo += buf;
  391.   displayInfo += "  High value: ";
  392.   itoa(TransferStruct.ScrollBarData.HighValue, buf, 10);
  393.   displayInfo += buf;
  394.   displayInfo += "  Current value: ";
  395.   itoa(TransferStruct.ScrollBarData.Position, buf, 10);
  396.   displayInfo += buf;
  397.  
  398.   // display info.
  399.   //
  400.   TTransferInfoDialog infoDialog(this, ID_DISPLAY_INFO, displayInfo);
  401.   infoDialog.Execute();
  402. }
  403.  
  404. //
  405. // Disable the 'App|Dialog' menu item if dialog is already active.
  406. //
  407. void
  408. TTransferWindow::CmDialogEnable(TCommandEnabler& commandHandler)
  409. {
  410.   commandHandler.Enable(!TransferDialog);
  411. }
  412.  
  413. //
  414. // The dialog has closed, notified by dialog.
  415. //
  416. TResult
  417. TTransferWindow::EvDialogClosed(TParam1, TParam2)
  418. {
  419.   TransferDialog = 0;
  420.   return 1;
  421. }
  422.  
  423.  
  424. //
  425. // class TTransferApp
  426. // ~~~~~ ~~~~~~~~~~~~
  427. class TTransferApp : public TApplication {
  428.   public:
  429.     TTransferApp()
  430.     :
  431.       TApplication("TransferTest")
  432.     {
  433.     }
  434.  
  435.     void InitMainWindow()
  436.     {
  437.       TFrameWindow* frame = new TFrameWindow(0, "Test Dialog Transfer",
  438.         new TTransferWindow);
  439.       frame->AssignMenu(ID_MENU);
  440.       SetMainWindow(frame);
  441.     }
  442. };
  443.  
  444. int
  445. OwlMain(int /*argc*/, char* /*argv*/ [])
  446. {
  447.   return TTransferApp().Run();
  448. }
  449.